#include <head.h>
/* 在计算机科学中，缓冲是指在数据传输过程中临时存储数据的内存区域。缓冲的目的是为了提高数据传输的效率，减少对系统资源的占用，
以及处理数据传输速率不匹配的问题。根据缓冲的方式，可以分为行缓冲（Line Buffering）、无缓冲（Unbuffered）和全缓冲（Full Buffering）三种类型。

行缓冲（Line Buffering）：
行缓冲是指在输入或输出时，数据被缓冲到内存中，直到遇到换行符（例如，回车符或换行字符）时才进行实际的I/O操作。
这种缓冲方式常见于终端输入输出，如标准输入（stdin）和标准输出（stdout）。
优点是可以在用户输入一行后立即处理，适合需要逐行处理的场景。

无缓冲（Unbuffered）：
无缓冲是指数据在输入或输出时，不经过任何缓冲，直接进行I/O操作。
这种缓冲方式常见于需要实时响应的场景，如错误输出（stderr）。
优点是可以立即看到输出结果，适合需要实时反馈的场景。

全缓冲（Full Buffering）：
全缓冲是指在输入或输出时，数据被缓冲到内存中，直到缓冲区满时才进行实际的I/O操作。
这种缓冲方式常见于文件操作，如读写文件。
优点是可以减少I/O操作的次数，提高数据传输的效率。 */
int main(int argc, char const *argv[])
{
    // 行缓冲
    char buf[1024];
    printf("请输入一行字符串");        // 不输出，因为标准输出是行缓冲
    printf("请输入一行字符串\n12345"); // 输出，因为标准输出是行缓冲，遇到换行符，输出
    // for(int i = 0; i < 1025; i++)//缓冲区默认大小是1024(1k),缓冲区满，输出
    // {
    //     printf("1");
    // }
    // 无缓冲
    perror("错误"); // 错误输出，无缓冲，立即输出
    // 全缓冲
    FILE *fp = fopen("test.txt", "w"); // 文件操作，全缓冲
    FOPEN_ERR(fp);
    fprintf(fp, "hello world\n12345"); // 缓冲区满，输出 ,遇换行符
    // 设置全缓冲模式，并指定缓冲区大小
    if (setvbuf(fp, buf, _IOFBF, sizeof(buf)) != 0)
    {
        printf("Error setting buffer!\n");
        fclose(fp);
        return 1;
    }

    // 进行文件写入操作
    fprintf(fp, "This is a test.\n");
    fprintf(fp, "Another line.\n");

    fclose(fp);
    while (1)
    {
    }
    return 0;
}
